package cn.sell;

/**
 * 需求3个窗口卖票 共100张  使用synchronized解决数据安全问题
 */
public class SellTicket implements Runnable{
    private int ticket=100;
    private Object object=new Object();
    private int x=1;
    @Override
    public void run() {

            while (true) {
                if(x%2==0){
                try {
                    Thread.sleep(1000);//模拟出票时间
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //this 方法是同步方法锁
                synchronized (this) {  //同步代码块  ==> 只允许一个进程操作这个代码块
                if (ticket >= 0) {

                    System.out.println( Thread.currentThread().getName() + ":正在卖第" + ticket + "张票");//正在卖第100张票
                    ticket--;//卖出一张票
                }
                }
            }else {
                  sellTicket();
                }
                x++;
        }
    }

    private synchronized void sellTicket() { //同步方法
        try {
            Thread.sleep(1000);//模拟出票时间
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
       //同步代码块  ==> 只允许一个进程操作这个代码块
            if (ticket >= 0) {
                System.out.println( "奇数"+Thread.currentThread().getName() + ":正在卖第" + ticket + "张票");//正在卖第100张票
                ticket--;//卖出一张票
            }

    }

}
